/*                          UX-Framework                               
 *                                                                 
 *  iZE Co.,Ltd. Copyright 2009 All rights reserved.          
 *  This file is distributed under the terms of the GNU Lesser 
 *  General Public License, described in file LICENSE.                                     
 */

package jp.ize.ux.components;

import jp.ize.ux.UXObject;
import jp.ize.ux.UXPoint;
import jp.ize.ux.UXController;
import jp.ize.ux.UXInteraction;
import jp.ize.ux.states.UXLinearState;
// {{{ class UXLinearBoxCoState
class UXLinearBoxCoState
{
	// {{{ public var focused(default, default) : Bool
	/**
	 * フォーカスが当たっているかどうかを取得、または設定します。
	 */
	public var focused(default, default) : Bool;
	// }}}
	// {{{ public var highlighted(default, default) : Bool
	/**
	 * ハイライトされているかどうかを取得、または設定します。
	 */
	public var highlighted(default, default) : Bool;
	// }}}
}
// }}}
// {{{ enum UXLinearBoxExclusiveState
/**
 * UXLinearの各種状況を表現します。
 */
enum UXLinearBoxExclusiveState
{
	/** 初期化状態にある事を意味します。*/
	INIT;
	/** 無効になっている事を意味します。*/
	DISABLE;
	/** 有効になっている事を意味します。パラメーターでは、フォーカスやハイライトの状況を保持します。*/
	ENABLE ( flags : UXLinearBoxCoState );
}
// }}}
// {{{ class UXLinearBoxState extends UXLinearState
class UXLinearBoxState extends UXLinearState
{
	// {{{ public function new()
	/**
	 * コンストラクタです。
	 */
	public function new( startp : UXPoint, endp : UXPoint, width : Float )
	{
		super( startp, endp, width );
	}
	// }}}
	// {{{ public var background(default, default) : UXObject
	/**
	 * 背景となるオブジェクトです。デフォルトはnullです。
	 */
	public var background(default, default) : UXObject;
	// }}}
	// {{{ public var condition( default, default) : UXLinearBoxExclusiveState;
	/**
	 * enableかどうかやフォーカスが当たっているかなど各種状況を保持する変数です。
	 */
	public var condition( default, default) : UXLinearBoxExclusiveState;
	// }}}
}
// }}}
// {{{ class UXLinearBox extends UXComponent
/**
 * UXLinearBoxクラス.<br>
 * Linearレイアウトと背景を持つコンポーネント。<br>
 *
 * @author		iZE Co., Ltd.<br>
 * @version		$Id$<br>
 */
class UXLinearBox extends UXComponent
{
	// {{{ properties

	// プライベート変数
	private var _state : UXLinearBoxState;

	// }}}
	// {{{ public var ctrl : UXController<UXLinearState>;
	/**
	 * このコンポーネント内でのインタラクションを管理するコントローラークラスのインスタンスです。
	 */
	public var ctrl : UXController<UXLinearBoxState>;
	// }}}
	// {{{ public function new( startp : UXPoint, endp : UXPoint )
	/**
	 * コンストラクタです。
	 */
	public function new( startp : UXPoint, endp : UXPoint, width : Float )
	{
		super();
		_state = new UXLinearBoxState( startp, endp, width );
	}
	// }}}
	// {{{ public function setBackground( back : UXObject ) : Void
	/**
	 * 背景となるオブジェクトを設定できます。
	 */
	public function setBackground( back : UXObject ) : Void
	{
		//removeChild( _obj );
		//_obj = back;
		//addChild( _obj );
	}
	// }}}
	// {{{ public function update( updator : UXLinearBoxState -> Void ) : Void
	/**
	 * このコンポーネントの状態を直接変更するメソッドです。状態のどんな操作も可能になるので、
	 * このメソッドの使用には注意が必要です。
	 */
	public function update( updator : UXLinearBoxState -> Void ) : Void
	{
		updator( _state );
	}
	// }}}
}
// }}}
// {{{ class UXLinearBoxInitInteraction extends UXInteraction<UXLinearBoxState>
/**
 * UXLinearBoxInitInteraction クラス<br>
 * リニアボックスのデフォルト初期化インタラクションです。
 */
class UXLinearBoxInitInteraction extends UXInteraction<UXLinearBoxState>
{
}
// }}}
// {{{ class UXLinearBoxLayoutInteraction extends UXInteraction<UXLinearBoxState>
/**
 * UXLinearBoxLayoutInteraction クラス<br>
 * 直線上に子コンポーネントを配置するデフォルトインタラクションです。
 */
class UXLinearBoxLayoutInteraction extends UXInteraction<UXLinearBoxState>
{
}
// }}}
// {{{ class UXLinearBoxResizeInteraction extends UXInteraction<UXLinearBoxState>
/**
 * UXLinearBoxResizeInteraction クラス<br>
 * 大きさを変更するデフォルトインタラクションです。
 */
class UXLinearBoxResizeInteraction extends UXInteraction<UXLinearBoxState>
{
}
// }}}
// {{{ class UXLinearBoxEnableInteraction extends UXInteraction<UXLinearBoxState>
/**
 * UXLinearBoxEnableInteraction クラス<br>
 * 有効/無効を切り替えるデフォルトインタラクションです。
 */
class UXLinearBoxEnableInteraction extends UXInteraction<UXLinearBoxState>
{
}
// }}}
// {{{ class UXLinearBoxVisibilityInteraction extends UXInteraction<UXLinearBoxState>
/**
 * UXLinearBoxVisibilityInteraction クラス<br>
 * 表示/非表示に対するインタラクションです。
 */
class UXLinearBoxVisibilityInteraction extends UXInteraction<UXLinearBoxState>
{
}
// }}}
